package jmcnet.libcommun.communs.helpers
{
	import avmplus.FLASH10_FLAGS;
	
	import flash.utils.getQualifiedClassName;
	
	import jmcnet.libcommun.logger.JMCNetLog4JLogger;
	
	import mx.controls.DateField;
	
	import spark.components.DropDownList;
	import spark.components.TextInput;
	import jmcnet.libcommun.communs.enum.EnumBoolean;
	import jmcnet.libcommun.communs.enum.EnumConditionFiltreDate;

	public class HelperFilter
	{
		private static var log:JMCNetLog4JLogger = new JMCNetLog4JLogger(flash.utils.getQualifiedClassName(HelperFilter));
		
		private static var debugFiltre:Boolean=false;
			
		public static function emptyIfNull(obj:Object):Object {
			if (obj == null) return "";
			else return obj;
		}
		
		public static function estContenuDans(ch1:String, ch2:String):Boolean {
			if (debugFiltre) log.debug("Appel estContenuDans ch1='"+ch1+"' ch2='"+ch2+"'");
			var res:Boolean = true;
			if (ch1 == null || ch1.length <= 0) res = true;
			else if (ch1 != null && (ch2 == null || ch2.length <= 0)) res = false;
			else if (ch1 != null && ch2 != null) {
				if (ch2.length > 0) {
					if (ch2.toUpperCase().indexOf(ch1.toUpperCase()) == -1) res = false;
				}
			}
			
			
			if (debugFiltre) log.debug("Fin estContenuDans res="+res);
			return res;
		}
		
		public static function estContenuDansTextInput(tiFltr:TextInput, itemValue:String):Boolean {
			if (debugFiltre) log.debug("Appel estContenuDansTextInput ti='"+tiFltr+"' itemValue='"+itemValue+"'");
			var res:Boolean = true;
			if (tiFltr == null || tiFltr.text == "") {
				if (debugFiltre) log.debug("Fin estContenuDansTextInput pas de ti : res="+res);
				return res;
			}
			res = HelperFilter.estContenuDans(tiFltr.text, itemValue);
			if (debugFiltre) log.debug("Fin estContenuDansTextInput res="+res);
			return res;
		}
		
		public static function estContenuDansEnumBoolean(lstFltr:DropDownList, itemValue:Boolean):Boolean {
			if (debugFiltre) log.debug("Appel estContenuDansEnumBoolean lstFltr='"+lstFltr+"' itemValue='"+itemValue+"'");
			var res:Boolean = true;
			if (lstFltr != null && lstFltr.selectedItem != null) {
				if (lstFltr.selectedItem == EnumBoolean.TYPE_Oui && itemValue != true) {
					if (debugFiltre) log.debug("-> Faux");
					res = false;
				}
				else if (lstFltr.selectedItem == EnumBoolean.TYPE_Non && itemValue != false) {
					if (debugFiltre) log.debug("-> Faux");
					res = false;
				}
			}
			if (debugFiltre) log.debug("Fin estContenuDansEnumBoolean res="+res);
			return res;
		}
		
		public static function estContenuDansDate(dateFltr:DateField, itemValue:Date):Boolean {
			if (debugFiltre) log.debug("Appel estContenuDansDate dateFltr='"+dateFltr+"' itemValue='"+itemValue+"'");
			var res:Boolean = true;
			
			if (dateFltr != null && dateFltr.selectedDate != null && itemValue != null) {
				// On efface les heures, minutes, secondes, ...
				var pureItem:Date = new Date(itemValue.fullYear, itemValue.month, itemValue.date, 0,0,0,0);
				if (dateFltr.selectedDate.time != pureItem.time) res = false;
			}
			else if (dateFltr != null && dateFltr.selectedDate != null && itemValue == null) {
				res = false
			}
			
			if (debugFiltre) log.debug("Fin estContenuDansDate res="+res);
			return res;
		}
		
		public static function estContenuDansDateAvecCondition(conditionDate:EnumConditionFiltreDate, dateFltr:DateField, itemValue:Date):Boolean {
			if (debugFiltre) log.debug("Appel estContenuDansDateAvecCondition condition="+conditionDate.value+" dateFltr='"+dateFltr+"' itemValue='"+itemValue+"'");
			var res:Boolean = true;
			
			if (dateFltr != null && dateFltr.selectedDate != null && itemValue != null) {
				// On efface les heures, minutes, secondes, ...
				var pureItem:Date = new Date(itemValue.fullYear, itemValue.month, itemValue.date, 0,0,0,0);
				if (conditionDate == EnumConditionFiltreDate.TYPE_Egal && dateFltr.selectedDate.time != pureItem.time) res = false;
				if (conditionDate == EnumConditionFiltreDate.TYPE_Inferieur && dateFltr.selectedDate.time < pureItem.time) res = false;
				if (conditionDate == EnumConditionFiltreDate.TYPE_Superieur && dateFltr.selectedDate.time > pureItem.time) res = false;
			}
			else if (dateFltr != null && dateFltr.selectedDate != null && itemValue == null) {
				res = false
			}
//			else if ((dateFltr == null || dateFltr.selectedDate == null) && itemValue != null && conditionDate != EnumConditionFiltreDate.TYPE_Superieur) {
//				res = false
//			}
			if (debugFiltre) log.debug("Fin estContenuDansDateAvecCondition res="+res);
			return res;
		}
	}
}